import tensorflow as tf
from tensorflow.keras import layers, models


# 构建CNN模型
def build_cnn_model(input_shape):
    model = models.Sequential()

    # 第一层卷积层和池化层
    model.add(layers.Conv2D(32, (2, 2), activation='relu', input_shape=input_shape))
    model.add(layers.MaxPooling2D((2, 2)))

    # 第二层卷积层和池化层
    model.add(layers.Conv2D(64, (2, 2), activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))

    # 第三层卷积层和池化层
    model.add(layers.Conv2D(128, (2, 2), activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))

    # 展平层
    model.add(layers.Flatten())

    # 全连接层
    model.add(layers.Dense(128, activation='relu'))

    # 输出层
    model.add(layers.Dense(1, activation='sigmoid'))

    return model


# 假设你希望每个代码片段的最大长度是 100 个标识符
max_length = 100

# 假设每个标识符被嵌入为一个 64 维的向量
vector_size = 64

# 示例：调整后的输入形状
input_shape = (max_length, vector_size, 1)  # 假设 max_length 和 vector_size 已经定义

# 初始化模型
model = build_cnn_model(input_shape)

# 编译模型
model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# 打印模型摘要
model.summary()